home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Resources / Online / Term / Extras / Source / term-source.lha / CopyPanel.c < prev    next >
C/C++ Source or Header  |  1996-10-20  |  8KB  |  377 lines

  1. /*
  2. **    CopyPanel.c
  3. **
  4. **    Editing panel for configuration copying
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16. enum    {    GAD_SERIAL=1,GAD_MODEM,GAD_SCREEN,GAD_TERMINAL,GAD_EMULATION,
  17.             GAD_CLIPBOARD,GAD_CAPTURE,GAD_COMMANDS,GAD_MISC,GAD_PATHS,GAD_TRANSFER,
  18.             GAD_TRANSLATION,GAD_KEYMACROS,GAD_CURSORKEYS,GAD_FASTMACROS,GAD_COPYTOALL,
  19.             GAD_DEFAULT,GAD_ALL,GAD_CLEAR,GAD_USE,GAD_CANCEL
  20.         };
  21.  
  22. enum    {    COPY_MAIN_CONFIG,COPY_DEFAULTS };
  23.  
  24. STATIC ULONG    Bits = 0;
  25.  
  26. STATIC BYTE        CopyMode = COPY_MAIN_CONFIG;
  27. STATIC BOOL        AllFileSettings = FALSE;
  28.  
  29. STATIC VOID
  30. CopyConfig(struct Configuration *LocalConfig,LONG WhichPart)
  31. {
  32.     STATIC LONG TypeMappings[][2] =
  33.     {
  34.         GAD_SERIAL,            PREF_SERIAL,
  35.         GAD_MODEM,            PREF_MODEM,
  36.         GAD_SCREEN,            PREF_SCREEN,
  37.         GAD_TERMINAL,        PREF_TERMINAL,
  38.         GAD_EMULATION,        PREF_EMULATION,
  39.         GAD_CLIPBOARD,        PREF_CLIP,
  40.         GAD_CAPTURE,        PREF_CAPTURE,
  41.         GAD_COMMANDS,        PREF_COMMAND,
  42.         GAD_MISC,            PREF_MISC,
  43.         GAD_PATHS,            PREF_PATH,
  44.         GAD_TRANSFER,        PREF_TRANSFER,
  45.         GAD_TRANSLATION,    PREF_TRANSLATIONFILENAME,
  46.         GAD_KEYMACROS,        PREF_MACROFILENAME,
  47.         GAD_CURSORKEYS,        PREF_CURSORFILENAME,
  48.         GAD_FASTMACROS,        PREF_FASTMACROFILENAME,
  49.  
  50.         -1
  51.     };
  52.  
  53.     LONG i;
  54.  
  55.     for(i = 0 ; TypeMappings[i][0] != -1 ; i++)
  56.     {
  57.         if(WhichPart == TypeMappings[i][0])
  58.         {
  59.             LONG Type;
  60.             APTR Data;
  61.  
  62.             Type = TypeMappings[i][1];
  63.             Data = GetConfigEntry(LocalConfig,Type);
  64.  
  65.             if(CopyMode == COPY_MAIN_CONFIG)
  66.             {
  67.                 if(CreateConfigEntry(LocalConfig,Type))
  68.                 {
  69.                     if(Data)
  70.                         PutConfigEntry(LocalConfig,Data,Type);
  71.                     else
  72.                         ResetConfigEntry(LocalConfig,Type);
  73.                 }
  74.             }
  75.             else
  76.             {
  77.                 if(Data && (Type != PREF_FILE || AllFileSettings))
  78.                     DeleteConfigEntry(LocalConfig,Type);
  79.             }
  80.  
  81.             break;
  82.         }
  83.     }
  84. }
  85.  
  86. BOOL
  87. CopyPanel(struct Window *Parent,struct Configuration *LocalConfig,BOOL Selective)
  88. {
  89.     LayoutHandle *Handle;
  90.     BOOL MadeChanges;
  91.  
  92.     MadeChanges = FALSE;
  93.  
  94.     if(Handle = LT_CreateHandleTags(Window->WScreen,
  95.         LAHN_LocaleHook,    &LocaleHook,
  96.     TAG_DONE))
  97.     {
  98.         struct Window *PanelWindow;
  99.  
  100.         LT_New(Handle,
  101.             LA_Type,    VERTICAL_KIND,
  102.         TAG_DONE);
  103.         {
  104.             LT_New(Handle,
  105.                 LA_Type,    HORIZONTAL_KIND,
  106.                 LA_LabelID,    MSG_V36_0028,
  107.             TAG_DONE);
  108.             {
  109.                 LONG i;
  110.  
  111.                 for(i = 0 ; i <= GAD_FASTMACROS - GAD_SERIAL ; i++)
  112.                 {
  113.                     if(!(i % 5))
  114.                     {
  115.                         LT_New(Handle,
  116.                             LA_Type,    VERTICAL_KIND,
  117.                         TAG_DONE);
  118.                     }
  119.  
  120.                     LT_New(Handle,
  121.                         LA_Type,        CHECKBOX_KIND,
  122.                         LA_LabelID,        MSG_COPYPANEL_SERIAL_GAD + i,
  123.                         LA_ID,            GAD_SERIAL + i,
  124.                         GTCB_Checked,    Bits & (1L << i),
  125.                     TAG_DONE);
  126.  
  127.                     if(!((i + 1) % 5))
  128.                         LT_EndGroup(Handle);
  129.                 }
  130.  
  131.                 LT_EndGroup(Handle);
  132.             }
  133.  
  134.             LT_New(Handle,
  135.                 LA_Type,    VERTICAL_KIND,
  136.             TAG_DONE);
  137.             {
  138.                 LT_New(Handle,
  139.                     LA_Type,    XBAR_KIND,
  140.                 TAG_DONE);
  141.  
  142.                 LT_EndGroup(Handle);
  143.             }
  144.  
  145.             LT_New(Handle,
  146.                 LA_Type,    VERTICAL_KIND,
  147.             TAG_DONE);
  148.             {
  149.                 LT_New(Handle,
  150.                     LA_Type,        CHECKBOX_KIND,
  151.                     LA_LabelID,        MSG_COPYPANEL_TO_ALL_ENTRIES_GAD,
  152.                     LA_ID,            GAD_COPYTOALL,
  153.                     GTCB_Checked,    !LocalConfig,
  154.                     GA_Disabled,    !LocalConfig,
  155.                 TAG_DONE);
  156.  
  157.                 LT_New(Handle,
  158.                     LA_Type,        MX_KIND,
  159.                     LA_LabelID,        MSG_COPYPANEL_COPY_TYPE_GAD,
  160.                     LA_ID,            GAD_DEFAULT,
  161.                     LA_BYTE,        &CopyMode,
  162.                     LAMX_FirstLabel,MSG_COPYPANEL_COPY_GLOBAL_CONFIG_MSG,
  163.                     LAMX_LastLabel,    MSG_COPYPANEL_COPY_GLOBAL_DEFAULTS_MSG,
  164.                 TAG_DONE);
  165.  
  166.                 LT_EndGroup(Handle);
  167.             }
  168.  
  169.             LT_New(Handle,
  170.                 LA_Type,    VERTICAL_KIND,
  171.             TAG_DONE);
  172.             {
  173.                 LT_New(Handle,
  174.                     LA_Type,    XBAR_KIND,
  175.                 TAG_DONE);
  176.  
  177.                 LT_EndGroup(Handle);
  178.             }
  179.  
  180.             LT_New(Handle,
  181.                 LA_Type,    HORIZONTAL_KIND,
  182.             TAG_DONE);
  183.             {
  184.                 LT_New(Handle,
  185.                     LA_Type,    BUTTON_KIND,
  186.                     LA_LabelID,    MSG_COPYPANEL_ALL_GAD,
  187.                     LA_ID,        GAD_ALL,
  188.                 TAG_DONE);
  189.  
  190.                 LT_New(Handle,
  191.                     LA_Type,    BUTTON_KIND,
  192.                     LA_LabelID,    MSG_COPYPANEL_CLEAR_GAD,
  193.                     LA_ID,        GAD_CLEAR,
  194.                 TAG_DONE);
  195.  
  196.                 LT_EndGroup(Handle);
  197.             }
  198.  
  199.             LT_New(Handle,
  200.                 LA_Type,    VERTICAL_KIND,
  201.             TAG_DONE);
  202.             {
  203.                 LT_New(Handle,LA_Type,XBAR_KIND,LAXB_FullSize,TRUE,TAG_DONE);
  204.  
  205.                 LT_EndGroup(Handle);
  206.             }
  207.  
  208.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  209.                 LAGR_SameSize,    TRUE,
  210.                 LAGR_Spread,    TRUE,
  211.             TAG_DONE);
  212.             {
  213.                 LT_New(Handle,
  214.                     LA_Type,        BUTTON_KIND,
  215.                     LA_LabelID,        MSG_GLOBAL_USE_GAD,
  216.                     LA_ID,            GAD_USE,
  217.                     LABT_ReturnKey,    TRUE,
  218.                     LABT_ExtraFat,    TRUE,
  219.                 TAG_DONE);
  220.  
  221.                 LT_New(Handle,
  222.                     LA_Type,        BUTTON_KIND,
  223.                     LA_LabelID,        MSG_GLOBAL_CANCEL_GAD,
  224.                     LA_ID,            GAD_CANCEL,
  225.                     LABT_EscKey,    TRUE,
  226.                     LABT_ExtraFat,    TRUE,
  227.                 TAG_DONE);
  228.  
  229.                 LT_EndGroup(Handle);
  230.             }
  231.  
  232.             LT_EndGroup(Handle);
  233.         }
  234.  
  235.         if(PanelWindow = LT_Build(Handle,
  236.             LAWN_TitleID,        MSG_COPYPANEL_COPY_CONFIG_TXT,
  237.             LAWN_HelpHook,        &GuideHook,
  238.             LAWN_Parent,        Parent,
  239.             WA_DepthGadget,        TRUE,
  240.             WA_DragBar,            TRUE,
  241.             WA_RMBTrap,            TRUE,
  242.             WA_Activate,        TRUE,
  243.             WA_SimpleRefresh,    TRUE,
  244.         TAG_DONE))
  245.         {
  246.             struct IntuiMessage    *Message;
  247.             struct Gadget *MsgGadget;
  248.             ULONG MsgClass;
  249.             BOOL Done;
  250.  
  251.             Done = FALSE;
  252.  
  253.             GuideContext(CONTEXT_COPY);
  254.  
  255.             PushWindow(PanelWindow);
  256.  
  257.             LT_ShowWindow(Handle,TRUE);
  258.  
  259.             do
  260.             {
  261.                 if(Wait(PORTMASK(PanelWindow->UserPort) | SIG_BREAK) & SIG_BREAK)
  262.                     break;
  263.  
  264.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  265.                 {
  266.                     MsgClass    = Message->Class;
  267.                     MsgGadget    = (struct Gadget *)Message->IAddress;
  268.  
  269.                     LT_ReplyIMsg(Message);
  270.  
  271.                     if(MsgClass == IDCMP_GADGETUP)
  272.                     {
  273.                         LONG i;
  274.  
  275.                         switch(MsgGadget->GadgetID)
  276.                         {
  277.                             case GAD_ALL:
  278.  
  279.                                 for(i = GAD_SERIAL ; i <= GAD_FASTMACROS ; i++)
  280.                                     LT_SetAttributes(Handle,i,GTCB_Checked,TRUE,TAG_DONE);
  281.  
  282.                                 break;
  283.  
  284.                             case GAD_CLEAR:
  285.  
  286.                                 for(i = GAD_SERIAL ; i <= GAD_FASTMACROS ; i++)
  287.                                     LT_SetAttributes(Handle,i,GTCB_Checked,FALSE,TAG_DONE);
  288.  
  289.                                 break;
  290.  
  291.                             case GAD_USE:
  292.  
  293.                                 Bits = NULL;
  294.  
  295.                                 if(LT_GetAttributes(Handle,GAD_COPYTOALL,TAG_DONE))
  296.                                 {
  297.                                     LONG j;
  298.  
  299.                                     AllFileSettings = TRUE;
  300.  
  301.                                     for(i = GAD_TRANSLATION ; i <= GAD_FASTMACROS ; i++)
  302.                                         AllFileSettings &= LT_GetAttributes(Handle,i,TAG_DONE);
  303.  
  304.                                     if(Selective)
  305.                                     {
  306.                                         for(i = 0 ; i <= GAD_FASTMACROS - GAD_SERIAL ; i++)
  307.                                         {
  308.                                             if(LT_GetAttributes(Handle,GAD_SERIAL + i,TAG_DONE))
  309.                                             {
  310.                                                 for(j = 0 ; j < GlobalPhoneHandle->NumPhoneEntries ; j++)
  311.                                                 {
  312.                                                     if(GlobalPhoneHandle->Phonebook[j]->Count != -1)
  313.                                                         CopyConfig(GlobalPhoneHandle->Phonebook[j]->Config,GAD_SERIAL + i);
  314.                                                 }
  315.  
  316.                                                 Bits |= (1L << i);
  317.  
  318.                                                 MadeChanges = TRUE;
  319.                                             }
  320.                                         }
  321.                                     }
  322.                                     else
  323.                                     {
  324.                                         for(i = 0 ; i <= GAD_FASTMACROS - GAD_SERIAL ; i++)
  325.                                         {
  326.                                             if(LT_GetAttributes(Handle,GAD_SERIAL + i,TAG_DONE))
  327.                                             {
  328.                                                 for(j = 0 ; j < GlobalPhoneHandle->NumPhoneEntries ; j++)
  329.                                                     CopyConfig(GlobalPhoneHandle->Phonebook[j]->Config,GAD_SERIAL + i);
  330.  
  331.                                                 Bits |= (1L << i);
  332.  
  333.                                                 MadeChanges = TRUE;
  334.                                             }
  335.                                         }
  336.                                     }
  337.                                 }
  338.                                 else
  339.                                 {
  340.                                     if(LocalConfig)
  341.                                     {
  342.                                         for(i = 0 ; i <= GAD_FASTMACROS - GAD_SERIAL ; i++)
  343.                                         {
  344.                                             if(LT_GetAttributes(Handle,GAD_SERIAL + i,TAG_DONE))
  345.                                             {
  346.                                                 CopyConfig(LocalConfig,GAD_SERIAL + i);
  347.  
  348.                                                 Bits |= (1L << i);
  349.  
  350.                                                 MadeChanges = TRUE;
  351.                                             }
  352.                                         }
  353.                                     }
  354.                                 }
  355.  
  356.                                 Done = TRUE;
  357.                                 break;
  358.  
  359.                             case GAD_CANCEL:
  360.  
  361.                                 Done = TRUE;
  362.                                 break;
  363.                         }
  364.                     }
  365.                 }
  366.             }
  367.             while(!Done);
  368.  
  369.             PopWindow();
  370.         }
  371.  
  372.         LT_DeleteHandle(Handle);
  373.     }
  374.  
  375.     return(MadeChanges);
  376. }
  377.